#ifndef _LOGIN_H_
#define _LOGIN_H_

#include <string>
#include <vector>

using std::string;
using std::vector;

//! struct nomepass
/*! Contem o nome e a password de um utilizador
 */
struct nomepass {
    string nome; /*!< Nome do utilizador */
    string password; /*!< Password do utilizador */
    //! Nivel de acesso dos utilizadores
    /*!
     * Nivel 0 corresponde ao Administrador.
     * Nivel 1 corresponde ao utilizador.
     */
    int nivel;
};

//! Classe Login
class Login {
public:
    //! Construtor
    Login();
    //! Destrutor
    ~Login();

    //! Escreve os utilizadores num ficheiro
    /*!
     * Formato do ficheiro:
     * Nome (com rot13)
     * Password (com rot13)
     * Nivel (0 ou 1)
     */
    void escrever_utilizadores();

    //! Le os utilizadores a partir de um ficheiro
    void ler_utilizadores();

    //! Efectua o login
    /*!
      \param nome o nome do utilizador
      \param password password do utilizador

      \return Devolve um inteiro com o valor 0 (login de administrador), 1 (login de utilizador) ou -1 (credenciais erradas)
    */
    int efectuar_login(string nome, string password);

    //! Adiciona um novo utilizador no sistema
    /*!
      \param nome nome do novo utilizador
      \param password password do novo utilizador
      \param nivel nivel de acesso do novo utilizador

      \return Devolve true se conseguir adicionar, ou false se o login ja existir
    */
    bool adicionar_novo_login(string nome, string password, int nivel);

    //! metodo rot13
    /*!
     * Aplica o algoritmo rot13 a uma string
     * Para mais informacoes ver: http://en.wikipedia.org/wiki/ROT13
     */
    string rot13(string cadeia);

private:
    //! Declaracao do vector de nomepass utilizadores
    /*! Corresponde a todos os utilizadores registados na base de dados */
    vector<nomepass> utilizadores;
};

//! Excepcao VectrJaContemElementos
/*! Esta excepcao e lancada se um determinado utilizador ja existir no sistema quando se cria um novo utilizador com o mesmo nome */
class VectorJaContemElementos {
public:
    VectorJaContemElementos() {}
};

#endif // _LOGIN_H_
